iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0

前言

昨天進行LangChain的核心功能Chain的使用,定義一系列的有順序的任務流程,那麼今天我們也會介紹另一個核心功能PromptTemplates,在任務流程當中,我們可能重複著使用同一種Prompt,但接收多個使用者輸入,那麼PromptTemplates就會幫助很大!

正文

昨天的程式碼

import os
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
os.environ["OPENAI_API_KEY"] = "你的OpenAI key"

model = ChatOpenAI(model="gpt-4o")


text = "hi!"

parser = StrOutputParser()

chain = model | parser

result = chain.invoke(text)

print(result)

現在我們import PromptTemplate,並且嘗試去使用系統訊息以及使用者輸入

from langchain_core.prompts import ChatPromptTemplate

system_template = "Translate the following into {language}:"

prompt_template = ChatPromptTemplate.from_messages(
    [("system", system_template), ("user", "{text}")]
)
  • 系統訊息通常用來作為對話的上下文或引導LLM的所要進行的行為。
    • 以這裡來說,指導LLM要翻譯使用者輸入的文字成某個語言
  • 使用者輸入,即作為使用者提供的內容

若想要使用這個PromptTemplate,直接將字典作為輸入,替換需要的部分

result = prompt_template.invoke({"language": "Chinese", "text": "hi"})

最後可以結合之前的Chain,來將這個PromptTemplate加入工作流程!

chain = prompt_template | model | parser

完整的程式碼

import os
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

os.environ["OPENAI_API_KEY"] = "你的OpenAI key"

model = ChatOpenAI(model="gpt-4o")

system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages(
    [("system", system_template), ("user", "{text}")]
)

# 需要輸出解析器
parser = StrOutputParser()
# 使用 | 組合提示模型和解析器
chain = prompt_template | model | parser
text = chain.invoke({"language": "Chinese", "text": "hi"})
print(text)

你好

為了展示出更多的應用價值,我們再展示出一個對話劇本產生器,輸入2個角色以及對話的背景,就可以產生出一段劇本

import os
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

os.environ["OPENAI_API_KEY"] = "你的OpenAI key"

model = ChatOpenAI(model="gpt-4o")

# 定義系統訊息,設置對話角色和情境
system_template = "創建一個對話場景包含 {character1} 和 {character2}."


prompt_template = ChatPromptTemplate.from_messages(
    [("system", system_template), ("user", "{dialogue_start}")]
)

# 需要輸出解析器
parser = StrOutputParser()

# 使用 | 組合提示模型和解析器
chain = prompt_template | model | parser

# 輸入對話角色和開始的對話
text = chain.invoke({"character1": "偵探", "character2": "嫌疑犯",
                    "dialogue_start": "你為什麼會在犯罪現場?"})
                    
print(text)

偵探: (凝視著嫌疑犯)你為什麼會在犯罪現場?我們有目擊者說看到你在那裡。

嫌疑犯: (顯得有些緊張)我……我只是剛好路過。我那天晚上有點喝多了,所以走了一條平時不會走的路。

偵探: 喝多了?那你怎麼解釋你身上有受害者的血跡?

嫌疑犯: (睜大眼睛)血跡?不可能!我根本不知道有什麼犯罪發生了!

偵探: (把一張照片推到嫌疑犯面前)這是你當時穿的衣服,上面有明顯的血跡。你還要繼續否認嗎?

嫌疑犯: (低頭看著照片,沉默片刻)好吧,我承認我當時確實在那裡,但我沒有殺人!我只是看到有人倒在地上,我想幫忙,但看到他已經不行了,我就慌了。

偵探: (冷靜地)那麼,你看到的是誰?還有其他人在場嗎?

嫌疑犯: (深吸一口氣)我……我記得有一個穿著黑色風衣的人在那裡,但我沒看清他的臉。他看到我就跑了。

偵探: 好,這是一個開始。接下來你最好什麼都不要隱瞞,否則對你不利。你還記得其他細節嗎?

嫌疑犯: (努力回憶)我記得那人手上好像有什麼東西閃了一下,可能是刀。我真的沒有參與這件事,請你相信我。

偵探: (點頭)我們會調查你提供的線索。但如果我們發現你在說謊,你會面臨更嚴重的後果。現在,你最好交代清楚所有你知道的事情。

嫌疑犯: 好……我會說實話。希望你能找到真正的兇手。


明天我們會介紹LangServe,快速部屬應用程式


上一篇
day3 LangChain核心:通過 Chain 提升任務自動化
下一篇
day5 LangServe快速部屬應用程式:兩人對話劇本產生器
系列文
智能雲端架構圖生成:結合LangChain&LangGrpah與Rag的創新應用27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言